package com.xky.ui.module.productManagement;

import com.xky.pojo.Products;
import com.xky.ui.module.productManagement.select.ProductService;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.util.List;
import java.util.concurrent.ExecutionException;

import static com.xky.ui.main.MainView.*;

public class BasicMassageInfo {

    private static JTable productTable;
    private static JPanel homePanel;

    /**
     * 显示商品信息页面
     */
    public static void showProductInfoPage() {

        // 创建商品信息面板
        // 创建一个包含产品信息的面板，并设置刷新产品数据的回调方法
        JPanel productInfoPanel = BasicMassage.createProductInfoPanel(BasicMassageInfo::refreshProductData);


        // 从productInfoPanel中获取CENTER位置的组件，并检查该组件是否为JScrollPane的实例
        Component centerComponent = productInfoPanel.getComponent(1); // 获取CENTER位置的组件
        if (centerComponent instanceof JScrollPane) {
            JScrollPane scrollPane = (JScrollPane) centerComponent;
            Component viewComponent = scrollPane.getViewport().getView();
            if (viewComponent instanceof JTable) {
                productTable = (JTable) viewComponent;
            }
        }


        // 更新右侧面板
        rightPanel.removeAll();//移除所有现有组件
        rightPanel.add(productInfoPanel, BorderLayout.CENTER);//添加产品信息面板
        rightPanel.revalidate();//重新绘制界面
        rightPanel.repaint();


        // 注册刷新操作
        registerRefreshAction("商品信息", BasicMassageInfo::refreshProductData);

        // 立即刷新一次
        refreshProductData();
    }

    /**
     * 刷新商品数据
     */
    static void refreshProductData() {
        new SwingWorker<List<Products>, Void>() {
            @Override
            //SwingWorker：这是一个允许在后台线程中执行任务，并在任务完成后将结果安全地发布到事件调度线程的类。
            // 这对于需要在 GUI 中显示长时间运行的任务的结果的情况非常有用。
            protected List<Products> doInBackground() {
                DefaultTableModel model = (DefaultTableModel) productTable.getModel();
                model.setRowCount(0);
                
                // 获取所有商品数据
                return ProductService.selectAllProducts();
            }

            @Override
            protected void done() {
                try {
                    List<Products> products = get();
                    if (productTable != null) {
                        BasicMassage.updateTableData(productTable, products);
                        rightPanel.repaint();
                    }
                } catch (InterruptedException | ExecutionException e) {
                    e.printStackTrace();
                    JOptionPane.showMessageDialog(null,
                            "刷新失败：" + e.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
                }
            }
        }.execute();
    }

    /**
     * 显示首页
     */
    public static void showHomePage() {

        // 取消注册刷新操作
        unregisterRefreshAction();

        // 如果首页面板不存在，创建一个
        if (homePanel == null) {
            homePanel = BasicMassage.createHomePanel();
        }

        // 更新右侧面板
        rightPanel.removeAll();
        rightPanel.add(homePanel, BorderLayout.CENTER);
        rightPanel.revalidate();
        rightPanel.repaint();
    }


}
